package com.ruoyi.merchant.service;

import java.util.List;

import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.merchant.domain.Merchant;
import com.ruoyi.merchant.domain.dto.MerchantRankingDTO;

/**
 * 商户管理Service接口
 * 
 * @author ruoyi
 * @date 2025-07-09
 */
public interface IMerchantService 
{
    /**
     * 商户查询:
     * 商户状态有
     *          审核状态(0-待审核，1-已通过，2-已拒绝)
     *          删除状态(0-未删除，1-已删除)
     *          营业状态(0暂停营业、1开始营业)
     * 所以查询要有如下查询模式:
     *          根据商户mId查询某个商户
     *          查询所有的商户列表(不筛选状态)
     *          查询未被删除的商户列表
     *          查询审核已被拒绝的商户列表
     *          查询已审核的商户列表
     *          查询已审核且未被删除的商户列表
     *          查询正在营业的商户列表
     */

    /**
     * 查询商户
     * 
     * @param mId 商户管理主键
     * @return 商户管理
     */
    public Merchant selectMerchantByMId(Long mId);

    /**
     * 查询所有的商户列表
     * 
     * @param merchant 商户管理
     * @return 商户管理集合
     */
    public List<Merchant> selectMerchantList(Merchant merchant);

    /**
     * 查询未被删除的商户列表
     *
     * @return
     */
    public List<Merchant> selectNotDeleteMerchants(Merchant merchant);

    /**
     * 查询审核已被拒绝的商户列表
     *
     * @return
     */
    public List<Merchant> selectRefuseAuditStatus(Merchant merchant);

    /**
     * 查询已通过审核的商户管理列表
     *
     * @return 商户管理集合
     */
    public List<Merchant> selectPassedMerchantList(Merchant merchant);

    /**
     * 查询已审核且未被删除的商户列表
     *
     * @return 商户管理集合
     */
    public List<Merchant> selectPassedAndNotDelMerchantList(Merchant merchant);

    /**
     * 查询正在营业的商户列表
     *
     * @return
     */
    public List<Merchant> selectOpeningMerchantList(Merchant merchant);

    /**
     * 新增商户管理
     * 
     * @param merchant 商户管理
     * @return 结果
     */
    public int insertMerchant(Merchant merchant);

    /**
     * 商户注册方法声明
     *
     * @param merchant
     * @param verificationCode
     * @return
     */
    public AjaxResult registerMerchant(Merchant merchant, int verificationCode);

    /**
     * 注册时根据手机号获取验证码方法声明
     *
     * @param phoneNumbers
     * @return
     */
    public AjaxResult getVerificationCodeRegister(String[] phoneNumbers);

    /**
     * 商户登录方法声明
     *
     * @param phoneNumber
     * @return
     */
    public AjaxResult loginMerchant(String phoneNumber);

    /**
     * 登录时根据手机号获取验证码方法声明
     *
     * @param phoneNumbers
     * @return
     */
    public AjaxResult getVerificationCodeLogin(String[] phoneNumbers);

    /**
     * 获取验证码
     *
     * @return
     */
    public String getVerificationCode(String[] phoneNumbers);

    /**
     * 修改商户管理
     * 
     * @param merchant 商户管理
     * @return 结果
     */
    public int updateMerchant(Merchant merchant);

    /**
     * 商户审核通过时修改审核状态并将商户的信息注册到用户表中
     * @param mId
     * @return
     */
    public int auditAndRegister(Long mId);

    /**
     * 批量删除商户管理
     * 
     * @param mIds 需要删除的商户管理主键集合
     * @return 结果
     */
    public int deleteMerchantByMIds(Long[] mIds);

    /**
     * 删除商户管理信息
     * 
     * @param mId 商户管理主键
     * @return 结果
     */
    public int deleteMerchantByMId(Long mId);

    /**
     * 查询已通过审核的商户列表并根据评论星级排名
     *
     * @return
     */
    public List<MerchantRankingDTO> PassedMerchantsListRanking();

}
